from abc import ABC, abstractmethod
import random

class Player(ABC):
    def __init__(self):
        self.moves = []
        self.position = (0, 0)
        self.path = [self.position]
    
    def make_move(self):
        move = random.choice(self.moves)
        current_x, current_y = self.position
        new_x = current_x + move[0]
        new_y = current_y + move[1]
        self.position = (new_x, new_y)
        self.path.append(self.position)
        return self.position
    
    @abstractmethod
    def level_up(self):
        pass

class Pawn(Player):
    def __init__(self):
        super().__init__()
        # Define cardinal directions: up, down, left, right
        self.moves = [(0, 1), (0, -1), (-1, 0), (1, 0)]
    
    def level_up(self):
        # Add diagonal directions: up-left, up-right, down-left, down-right
        diagonals = [(-1, 1), (1, 1), (-1, -1), (1, -1)]
        self.moves.extend(diagonals)